1
Введение в PyTorch: почему тензоры важны
EvoClass-AI002Лекция 1
00:00

Введение в PyTorch: почему тензоры важны

PyTorch — это высоко гибкая, динамичная открытая платформа, которая пользуется популярностью для исследований в области глубокого обучения и быстрой разработки прототипов. В основе этой платформы лежит тензор — незаменимая структура данных. Это многомерный массив, предназначенный для эффективной обработки числовых операций, необходимых для моделей глубокого обучения, с автоматической поддержкой ускорения на ускорении на GPU automatically.

1. Понимание структуры тензора

Каждый вход, выход и параметр модели в PyTorch содержится в тензоре. Они выполняют ту же функцию, что и массивы NumPy, но оптимизированы для обработки на специализированном аппаратном обеспечении, таком как GPU, что делает их значительно более эффективными для масштабных операций линейной алгебры, требуемых нейронными сетями.

Ключевые свойства определяют тензор:

  • Форма: Определяет размеры данных, выраженные в виде кортежа (например, $4 \times 32 \times 32$ для пакета изображений).
  • Тип данных: Указывает числовой тип элементов, хранящихся в тензоре (например, torch.float32 для весов модели, torch.int64 для индексации).
  • Устройство: Указывает физическое местоположение аппаратного обеспечения: обычно 'cpu' или 'cuda' (NVIDIA GPU).
Динамический граф и автодифференцирование
PyTorch использует императивную модель выполнения, то есть вычислительный граф строится по мере выполнения операций. Это позволяет использовать встроенную систему автоматического дифференцирования, Autograd, чтобы отслеживать каждую операцию над тензором, при условии, что свойство requires_grad=True установлено, что позволяет легко рассчитывать градиенты во время обратного распространения.
fundamentals.py
ТЕРМИНАЛbash — pytorch-env
> Готово. Нажмите «Запустить», чтобы выполнить.
>
ИНСПЕКТОР ТЕНЗОРОВ В режиме реального времени

Выполните код, чтобы просмотреть активные тензоры
Вопрос 1
Какая команда создаст $5 \times 5$-тензор, содержащий случайные числа, распределённые равномерно между 0 и 1?
torch.rand(5, 5)
torch.random(5, 5)
torch.uniform(5, 5)
torch.randn(5, 5)
Вопрос 2
Если тензор $A$ находится на процессоре, а тензор $B$ — на устройстве CUDA, что произойдет, если попытаться вычислить $A + B$?
Произойдет ошибка, потому что операции требуют, чтобы тензоры находились на одном и том же устройстве.
PyTorch автоматически перемещает $A$ на устройство CUDA и продолжает выполнение.
Операция выполняется на процессоре, и результат возвращается на процессор.
Вопрос 3
Какой наиболее распространённый тип данных (dtype) используется для весов модели и промежуточных вычислений в глубоком обучении?
torch.float32 (плавающая точка одинарной точности)
torch.int64 (целое число длинной точности)
torch.bool
torch.float64 (плавающая точка двойной точности)
Вызов: манипуляции с тензорами и форма
Подготовьте тензор к конкретной матричной операции.
У вас есть вектор признаков $F$ формы $(10,)$. Вам нужно умножить его на матрицу весов $W$ формы $(10, 5)$. Чтобы матричное умножение (MatMul) работало, $F$ должно быть двумерным.
Шаг 1
Какой должна быть форма $F$ перед умножением на $W$?
Решение:
Внутренние размерности должны совпадать, поэтому $F$ должен быть $(1, 10)$. Тогда $(1, 10) @ (10, 5) \rightarrow (1, 5)$.
Код: F_new = F.unsqueeze(0) или F_new = F.view(1, -1)
Шаг 2
Выполните матричное умножение между $F_{new}$ и $W$ (форма $(10, 5)$).
Решение:
Операция проста — обычное матричное умножение.
Код: output = F_new @ W или output = torch.matmul(F_new, W)
Шаг 3
Какой метод явно возвращает тензор с указанными размерами, позволяя вам свернуть тензор обратно до формы $(50,)$? (Предположим, что $F$ изначально был формы $(5, 10)$ и теперь свёрнут.)
Решение:
Используйте метод view или reshape методы. Самый быстрый способ свернуть — использовать -1 для одной измерения.
Код: F_flat = F.view(-1) или F_flat = F.reshape(50)